package com.example.calendarapp;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.*;
import android.util.Log;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class EventDatabaseOpenHelper extends SQLiteOpenHelper {
	private static String TAG = "EventDatabaseOpenHelper";
	private static String DB_PATH = "";
	private static final String DB_NAME = "events.sqlite.retry";
	private SQLiteDatabase mDataBase;
	private final Context mContext;
	
	public EventDatabaseOpenHelper(Context context)
	{
	    super(context, DB_NAME, null, 1);// 1? its Database Version
	    if(android.os.Build.VERSION.SDK_INT >= 17)
	    {
	       DB_PATH = context.getApplicationInfo().dataDir + "/databases/";         
	    } 
	    else 
	    { 
	       DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
	    }
	    this.mContext = context;
	}
	
	public void createDataBase() throws IOException
	{
		boolean mDataBaseExist = checkDataBase();
		if(!mDataBaseExist)
		{
			this.getReadableDatabase();
			this.close();
			try
			{
				copyDataBase();
				Log.e(TAG, "createDatabase database created");
			}
			catch(IOException mIOException)
			{
				throw new Error("ErrorCopyingDataBase");
			}
		}
	}
	
	private boolean checkDataBase()
	{
		File dbFile = new File(DB_PATH+DB_NAME);
		Log.e(TAG, "Exists?:" + Boolean.toString(dbFile.exists()));
		return dbFile.exists();
	}
	
	private void copyDataBase() throws IOException
	{
		InputStream mInput = mContext.getAssets().open(DB_NAME);
		String outFileName = DB_PATH + DB_NAME;
		OutputStream mOutput = new FileOutputStream(outFileName);
		byte[] mBuffer = new byte[1024];
		int mLength;
		while((mLength = mInput.read(mBuffer))>0)
		{
			mOutput.write(mBuffer,0,mLength);
		}
		Log.e(TAG, "mlength " + mLength);
		mOutput.flush();
		mOutput.close();
		mInput.close();
	}
	
	public boolean openDataBase() throws SQLException
	{
		String mPath = DB_PATH + DB_NAME;
		mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
		return mDataBase != null;
	}
	
	@Override
	public synchronized void close()
	{
		if(mDataBase != null)
		{
			mDataBase.close();
		}
		super.close();
	}
	
	@Override
	public void onCreate(SQLiteDatabase database)
	{
		//maybe do something with this later
	}
	
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion)
	{
		//db.execSQL("DROP TABLE IF EXISTS " + EVENT_TABLE_NAME);
		//onCreate(db);
	}
}
